//
// Created by xy on 2024/10/23.
//

#ifndef WEBDESK_UTILS_SQL_H_
#define WEBDESK_UTILS_SQL_H_

#include <stdbool.h>
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>

#include "config.h"

#define SQL_QUERY_SIZE 512
#define HASH_PWD_SIZE 256

enum SQL_USER{
  USER_ID = 0,
  USERNAME = 1,
  PASSWORD = 2,
  SALT = 3,
  LAST_ACTIVE = 4,
  DEATH = 5,
};

enum SQL_DIRECTORY_FOREST{
  FILE_ID = 0,
  FILE_NAME = 1,
  BELONG_USER = 2,
  FATHER_ID = 3,
  FILE_PATH = 4,
  FILE_TYPE = 5,
  FILE_HASH = 6,
  TRANSFER_SUCCESS = 7,
  DELETE_SIGN = 8,
};

/*
 *****************************基础接口****************************
*/

bool connect_to_db(MYSQL** connection,const char *host, const char *user, const char *password, const char *dbname);

// 执行插入、更新、删除操作，返回 0 表示成功，非 0 表示失败
bool execute_non_query(MYSQL* connection,const char *query);

// 执行查询操作，返回 MYSQL_RES 结果集，调用者负责处理结果和释放资源
MYSQL_RES* execute_query(MYSQL* connection,const char *query);

// 释放结果集
void free_result(MYSQL_RES *result);

// 关闭数据库连接
void close_db_connection(MYSQL* connection);

/*
 *****************************对外提供的服务接口****************************
*/

bool init_mysql(MYSQL **connection);

bool utils_login(MYSQL* connection,const char* user , const char* pwd);	// 登录

bool utils_register(MYSQL* connection,const char* user , const char* pwd);	// 注册

bool utils_logout(MYSQL* connection,const char* user);	// 注销

bool utils_remove_file(MYSQL* connection,const char* user , const char* path);	// 删除文件

bool utils_puts(MYSQL* connection,const char* user , const char* path , const char* file_name , const char* hash);	// 添加文件

bool utils_mkdir(MYSQL* connection,const char* user , const char* path , const char* file_name);	//添加文件夹

MYSQL_RES* utils_ls(MYSQL* connection,const char* user , const char* path);	// 获取文件夹下所有文件和文件夹

bool utils_cd(MYSQL* connection,const char* user , const char* cur_path , const char* target_dir);	// cd 命令

bool file_is_exist_byhash(MYSQL* connection,const char* hash);	// 判断某个文件是否存在
                                                                
bool file_be_delete(MYSQL* connection,const char * file_name,const char* path); // 判断某个文件是否标记位设置为删除
                                                                                
bool file_is_exist_byname(MYSQL* connection,const char* file_name ,const char* path);// 判断某个文件在当前用户下是否已经存在同名文件


//true:duandianshangchuan false:miaochuan
bool file_transfer_status(MYSQL*connection,const char* hash); 

//true:change file_hash==hash all file's transfer_success
bool change_file_transfer(MYSQL* connection,const char* hash  );	// 断点续传失败，修改对应状态

//根据文件名、当前路径、用户名获取hash值
int get_file_hash(MYSQL* connection,const char* filename, const char* path,const char* username,char* hash);

/*
 *****************************辅助接口****************************
*/

int getUserID(MYSQL* connection, const char* user);


#endif //WEBDESK_UTILS_SQL_H_
